import request from '@/utils/request'

/**
 * get请求时拼接参数字符串
 * @param {*} filter ajax参数对象
 */
const handleJointParmas = function (filter) {
  let arr = [];
  Object.keys(filter).forEach(key => {
    arr.push(key + '=' + filter[key]);
  })
  return '?' + arr.join("&");
}

export function fetchList(tblName, query) {
  return request({
    url: '/GET_LIST/' + tblName,
    method: 'post',
    data: query
  })
}
export function fetchOne(tblName, id) {
  return request({
    url: '/GET_ONE/' + tblName,
    method: 'post',
    data: {
      id
    }
  })
}

export function fetchMany(tblName, ids) {
  return request({
    url: '/GET_MANY/' + tblName,
    method: 'post',
    data: {
      ids
    }
  })
}

export function fetchManyReference(tblName, query) {
  return request({
    url: '/GET_MANY_REFERENCE/' + tblName,
    method: 'post',
    data: query
  })
}

export function create(tblName, data) {
  return request({
    url: '/CREATE/' + tblName,
    method: 'post',
    data: data
  })
}

export function updateOne(tblName, data) {
  return request({
    url: '/UPDATE/' + tblName,
    method: 'post',
    data
  })
}

export function updateMany(tblName, data) {
  return request({
    url: '/UPDATE_MANY/' + tblName,
    method: 'post',
    data: data
  })
}

export function deleteOne(tblName, data) {
  return request({
    url: '/DELETE/' + tblName,
    method: 'post',
    data: data
  })
}

export function deleteMany(tblName, data) {
  return request({
    url: '/DELETE_MANY/' + tblName,
    method: 'post',
    data: data
  })
}

/**
 * 查询列表
 * @param {*} tblName 操作的表名
 * @param {*} data 查询的筛选数据
 * @param {*} type 查询的类型
 */
export function getList(tblName, type, data = {}) {
  return request({
    url: tblName + '/list' + (type !== undefined ? '/' + type : ''),
    method: 'get',
    params: data
  })
}

/**
 * 删除单条数据
 * @param {*} tblName 操作的表名
 * @param {*} id 操作的数据主键
 */
export function deleteSingle(tblName, id, data = {}) {
  return request({
    url: tblName + '/delete' + (id !== undefined ? '/' + id : ''),
    method: 'post',
    data: data
  })
}

export function assessData(tblName, id, data = {}) {
  return request({
    url: tblName + '/assess' + (id !== undefined ? '/' + id : ''),
    method: 'post',
    data: data
  })
}

/**
 * 新建
 * @param {*} tblName 操作的表名
 * @param {*} data
 */
export function createNew(tblName, data = {}) {
  return request({
    url: tblName + '/create',
    method: 'post',
    data: data
  })
}
/**
 * 新建
 * @param {*} tblName 操作的表名
 * @param {*} data
 */
export function importMore(tblName, data = {}) {
  return request({
    url: tblName + '/import',
    method: 'post',
    data: data
  })
}

/**
 * 查询详情
 * @param {*} tblName
 * @param {*} id
 * @param {*} data
 */
export function fetchDetail(tblName, id, data = {}) {
  return request({
    url: tblName + '/' + id,
    method: 'get',
    data: data
  })
}


export function updateSingle(tblName, id, data = {}) {
  return request({
    url: tblName + '/update' + '/' + id,
    method: 'post',
    data: data
  })
}

export function fetchStatic(tblName, data = {}) {
  return request({
    url: tblName + '/static',
    method: 'get',
    params: data
  })
}

/**
 * 获取树
 * @param {*} data 属性包括一个pid和hierarchy
 */
export function getTree(data) {
  return request({
    url: '/GetMenuTree' + handleJointParmas(data),
    method: 'get',
    data: data
  })
}

/**
 * 转换需要模糊查询的字段值    后台根据参数前加 '%' 字符识别是否为模糊查询参数
 * @param {*} sourceQuery 源请求对象
 * @param {*} queryList 需要模糊查询的字段
 */
export function fuzzyQuery(sourceQuery, queryList) {
  var requestQurey = JSON.parse(JSON.stringify(sourceQuery))
  queryList && queryList.map(item => {
    requestQurey.filter[item] ? requestQurey.filter[item] = '%' + requestQurey.filter[item] : ''
  })
  return requestQurey
}

/**
 * 转换filed的中文
 * @param {*} multiples   可能需要显示不同名称的filed字段列表
 * @param {*} muptiple    当前filed
 * @param {*} labels      label集合
 * @param {*} key         当前分类id
 */
export function multipleLabel(multiples, muptiple, labels, key) {
  if (multiples.indexOf(muptiple) != -1) {
    return labels[muptiple][key]
  } else {
    return false
  }
}

/**
 * 根据类型判断是否显示某个字段
 * @param {*} key         当前字段
 * @param {*} filter      判断用对象，存储需要显示的某个字段的type类型
 * @param {*} type        type
 */
export function updateFiledByType(key, filter, type) {
  if (filter[key]) {
    if (filter[key].indexOf(type - 0) != -1) {
      return true
    } else {
      return false
    }
  } else {
    return true
  }
}

/**
 * 下划线参数转换为驼峰命名
 * @param {*} str
 */

export function toCamel(str) {
  return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {
    return $1 + $2.toUpperCase()
  })
}
